#pragma once

#include "../umlmodel_global.h"

#include "Behavior.h"

namespace uml {

/// <summary>
/// OpaqueBehavior
/// An OpaqueBehavior is a Behavior whose specification is given in a textual
/// language other than UML.
/// </summary>
class UMLMODEL_EXPORT OpaqueBehavior : public Behavior {

public: // Constructors and destructors
    explicit OpaqueBehavior(const QString& umlType="uml::OpaqueBehavior");

public: // JsonSerializable override
    void fromJson(const QJsonObject& json, QStringList& errorList) override;
    void toJson(QJsonObject& json) override;

public: // Properties
    /// <summary>
    /// bodys getter
    /// Specifies the behavior in one or more languages.
    /// </summary>
    vector<QString>& bodys();

    /// <summary>
    /// languages getter
    /// Languages the body strings use in the same order as the body strings.
    /// </summary>
    vector<QString>& languages();

private: // Fields
    /// <summary>
    /// bodys
    /// Specifies the behavior in one or more languages.
    /// </summary>
    vector<QString> bodys_;

    /// <summary>
    /// languages
    /// Languages the body strings use in the same order as the body strings.
    /// </summary>
    vector<QString> languages_;

};

} // namespace uml
